package com.salon.server.db;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDataSource;
import org.apache.commons.pool.impl.GenericObjectPool;
import org.apache.log4j.Logger;

/**
 * ������������� ���������� � ���� ������. ��������� ��� ���������� � �������
 * JDBC 2.0.
 * @see DBUtil
 */
public class DBConnector {
	private static final Logger LOG = Logger.getLogger(DBConnector.class);

	private static DBConnector connector = null;
	private static PoolingDataSource dataSource = null;

	/**
	 * ������������� ������ � ������������� ���������� ������-��������.
	 */
	public static DBConnector getInstance() {
		return connector;
	}

	public static DBConnector getInstance(String url, String user,
			String password) {
		if (connector == null) {
			connector = new DBConnector(url, user, password);
		}

		return connector;
	}

	/**
	 * ����������� �� ���������. �� ��������� ����������.
	 * 
	 */
	private DBConnector() {

	}

	/**
	 * �����������, ��������� ����������� � ���������� �����������.
	 * 
	 * @param url
	 *            ���� � ���� ������.
	 * @param user
	 *            ��� ������������ ���� ������.
	 * @param password
	 *            ������ ��� ������� � ����.
	 * 
	 */
	private DBConnector(String url, String user, String password) {
		try {
		Class.forName("com.mysql.jdbc.Driver");
		GenericObjectPool connectionPool = new GenericObjectPool(null);
		connectionPool.setMaxActive(5);
		connectionPool.setMaxWait(2);
		connectionPool.setMaxIdle(2);

		ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
				url, user, password);

		PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(
				connectionFactory, connectionPool, null, null, false, true);

		dataSource = new PoolingDataSource(connectionPool);
		} catch (ClassNotFoundException ex) {
			LOG.error("Can't load class com.mysql.jdbc.Driver!");
		}
	}

	/**
	 * ���������� ��������� ���������� �� ����.
	 * 
	 * @throws java.sql.SQLException
	 * @return ���������� � ����� ������
	 */
	public Connection getConnection() throws SQLException {
		return dataSource.getConnection();
	}

}
